#define STACK_ROWS 4
#define STACK_COLS 4
#elif defined (__ia64__)
-#define FMT_SIZE_T "%016lx"
-#define STACK_POINTER(regs) (regs->r12)
-#define FRAME_POINTER(regs) 0
-#define INSTR_POINTER(regs) (regs->cr_iip)
-#define STACK_ROWS 4
-#define STACK_COLS 4
/* On ia64, we can't translate virtual address to physical address. */
#define NO_TRANSLATION
#endif
void print_ctx(vcpu_guest_context_t *ctx1)
{
- struct cpu_user_regs *regs = &ctx1->user_regs;
- struct vcpu_extra_regs *er = &ctx1->extra_regs;
+ struct vcpu_guest_context_regs *regs = &ctx1->regs;
+ struct vcpu_tr_regs *tr = &ctx1->regs.tr;
int i, ps_val, ma_val;
unsigned long pa;
- const char ps[][5] = {" 4K", " 8K", " 16K", " ",
- " 64K", " ", "256K", " ",
- " 1M", " ", " 4M", " ",
- " 16M", " ", " 64M", " ",
- "256M"};
- const char ma[][4] = {"WB ", " ", " ", " ",
- "UC ", "UCE", "WC ", "Nat"};
+ static const char ps[][5] = {" 4K", " 8K", " 16K", " ",
+ " 64K", " ", "256K", " ",
+ " 1M", " ", " 4M", " ",
+ " 16M", " ", " 64M", " ",
+ "256M"};
+ static const char ma[][4] = {"WB ", " ", " ", " ",
+ "UC ", "UCE", "WC ", "Nat"};
- printf(" iip: %016lx ", regs->cr_iip);
- print_symbol(regs->cr_iip);
+ printf(" ip: %016lx ", regs->ip);
+ print_symbol(regs->ip);
printf("\n");
- printf(" ipsr: %016lx ", regs->cr_ipsr);
- printf(" b0: %016lx\n", regs->b0);
- printf(" b6: %016lx ", regs->b6);
- printf(" b7: %016lx\n", regs->b7);
- printf(" cr_ifs: %016lx ", regs->cr_ifs);
- printf(" ar_unat: %016lx\n", regs->ar_unat);
- printf(" ar_pfs: %016lx ", regs->ar_pfs);
- printf(" ar_rsc: %016lx\n", regs->ar_rsc);
- printf(" ar_rnat: %016lx ", regs->ar_rnat);
- printf(" ar_bspstore: %016lx\n", regs->ar_bspstore);
- printf(" ar_fpsr: %016lx ", regs->ar_fpsr);
- printf(" event_callback_ip: %016lx\n", er->event_callback_ip);
+ printf(" psr: %016lx ", regs->psr);
+ printf(" b0: %016lx\n", regs->b[0]);
+ printf(" b6: %016lx ", regs->b[6]);
+ printf(" b7: %016lx\n", regs->b[7]);
+ printf(" cfm: %016lx ", regs->cfm);
+ printf(" ar.unat: %016lx\n", regs->ar.unat);
+ printf(" ar.pfs: %016lx ", regs->ar.pfs);
+ printf(" ar.rsc: %016lx\n", regs->ar.rsc);
+ printf(" ar.rnat: %016lx ", regs->ar.rnat);
+ printf(" ar.bspstore: %016lx\n", regs->ar.bspstore);
+ printf(" ar.fpsr: %016lx ", regs->ar.fpsr);
+ printf(" event_callback_ip: %016lx\n", ctx1->event_callback_ip);
printf(" pr: %016lx ", regs->pr);
- printf(" loadrs: %016lx\n", regs->loadrs);
- printf(" iva: %016lx ", er->iva);
- printf(" dcr: %016lx\n", er->dcr);
+ /* printf(" loadrs: %016lx\n", regs->loadrs); */
+ printf(" iva: %016lx\n", regs->cr.iva);
+ printf(" dcr: %016lx\n", regs->cr.dcr);
printf("\n");
- printf(" r1: %016lx\n", regs->r1);
- printf(" r2: %016lx ", regs->r2);
- printf(" r3: %016lx\n", regs->r3);
- printf(" r4: %016lx ", regs->r4);
- printf(" r5: %016lx\n", regs->r5);
- printf(" r6: %016lx ", regs->r6);
- printf(" r7: %016lx\n", regs->r7);
- printf(" r8: %016lx ", regs->r8);
- printf(" r9: %016lx\n", regs->r9);
- printf(" r10: %016lx ", regs->r10);
- printf(" r11: %016lx\n", regs->r11);
- printf(" sp: %016lx ", regs->r12);
- printf(" tp: %016lx\n", regs->r13);
- printf(" r14: %016lx ", regs->r14);
- printf(" r15: %016lx\n", regs->r15);
- printf(" r16: %016lx ", regs->r16);
- printf(" r17: %016lx\n", regs->r17);
- printf(" r18: %016lx ", regs->r18);
- printf(" r19: %016lx\n", regs->r19);
- printf(" r20: %016lx ", regs->r20);
- printf(" r21: %016lx\n", regs->r21);
- printf(" r22: %016lx ", regs->r22);
- printf(" r23: %016lx\n", regs->r23);
- printf(" r24: %016lx ", regs->r24);
- printf(" r25: %016lx\n", regs->r25);
- printf(" r26: %016lx ", regs->r26);
- printf(" r27: %016lx\n", regs->r27);
- printf(" r28: %016lx ", regs->r28);
- printf(" r29: %016lx\n", regs->r29);
- printf(" r30: %016lx ", regs->r30);
- printf(" r31: %016lx\n", regs->r31);
+ printf(" r1: %016lx\n", regs->r[1]);
+ printf(" r2: %016lx ", regs->r[2]);
+ printf(" r3: %016lx\n", regs->r[3]);
+ printf(" r4: %016lx ", regs->r[4]);
+ printf(" r5: %016lx\n", regs->r[5]);
+ printf(" r6: %016lx ", regs->r[6]);
+ printf(" r7: %016lx\n", regs->r[7]);
+ printf(" r8: %016lx ", regs->r[8]);
+ printf(" r9: %016lx\n", regs->r[9]);
+ printf(" r10: %016lx ", regs->r[10]);
+ printf(" r11: %016lx\n", regs->r[11]);
+ printf(" sp: %016lx ", regs->r[12]);
+ printf(" tp: %016lx\n", regs->r[13]);
+ printf(" r14: %016lx ", regs->r[14]);
+ printf(" r15: %016lx\n", regs->r[15]);
+ printf(" r16: %016lx ", regs->r[16]);
+ printf(" r17: %016lx\n", regs->r[17]);
+ printf(" r18: %016lx ", regs->r[18]);
+ printf(" r19: %016lx\n", regs->r[19]);
+ printf(" r20: %016lx ", regs->r[20]);
+ printf(" r21: %016lx\n", regs->r[21]);
+ printf(" r22: %016lx ", regs->r[22]);
+ printf(" r23: %016lx\n", regs->r[23]);
+ printf(" r24: %016lx ", regs->r[24]);
+ printf(" r25: %016lx\n", regs->r[25]);
+ printf(" r26: %016lx ", regs->r[26]);
+ printf(" r27: %016lx\n", regs->r[27]);
+ printf(" r28: %016lx ", regs->r[28]);
+ printf(" r29: %016lx\n", regs->r[29]);
+ printf(" r30: %016lx ", regs->r[30]);
+ printf(" r31: %016lx\n", regs->r[31]);
printf("\n itr: P rid va pa ps ed pl "
"ar a d ma key\n");
for (i = 0; i < 8; i++) {
- ps_val = er->itrs[i].itir >> ITIR_PS_SHIFT & ITIR_PS_MASK;
- ma_val = er->itrs[i].pte >> PTE_MA_SHIFT & PTE_MA_MASK;
- pa = (er->itrs[i].pte >> PTE_PPN_SHIFT & PTE_PPN_MASK) <<
+ ps_val = tr->itrs[i].itir >> ITIR_PS_SHIFT & ITIR_PS_MASK;
+ ma_val = tr->itrs[i].pte >> PTE_MA_SHIFT & PTE_MA_MASK;
+ pa = (tr->itrs[i].pte >> PTE_PPN_SHIFT & PTE_PPN_MASK) <<
PTE_PPN_SHIFT;
pa = (pa >> ps_val) << ps_val;
printf(" [%d] %ld %06lx %016lx %013lx %02x %s %ld %ld %ld %ld "
"%ld %d %s %06lx\n", i,
- er->itrs[i].pte >> PTE_P_SHIFT & PTE_P_MASK,
- er->itrs[i].rid >> RR_RID_SHIFT & RR_RID_MASK,
- er->itrs[i].vadr, pa, ps_val,
+ tr->itrs[i].pte >> PTE_P_SHIFT & PTE_P_MASK,
+ tr->itrs[i].rid >> RR_RID_SHIFT & RR_RID_MASK,
+ tr->itrs[i].vadr, pa, ps_val,
((ps_val >= ITIR_PS_MIN && ps_val <= ITIR_PS_MAX) ?
ps[ps_val - ITIR_PS_MIN] : " "),
- er->itrs[i].pte >> PTE_ED_SHIFT & PTE_ED_MASK,
- er->itrs[i].pte >> PTE_PL_SHIFT & PTE_PL_MASK,
- er->itrs[i].pte >> PTE_AR_SHIFT & PTE_AR_MASK,
- er->itrs[i].pte >> PTE_A_SHIFT & PTE_A_MASK,
- er->itrs[i].pte >> PTE_D_SHIFT & PTE_D_MASK,
+ tr->itrs[i].pte >> PTE_ED_SHIFT & PTE_ED_MASK,
+ tr->itrs[i].pte >> PTE_PL_SHIFT & PTE_PL_MASK,
+ tr->itrs[i].pte >> PTE_AR_SHIFT & PTE_AR_MASK,
+ tr->itrs[i].pte >> PTE_A_SHIFT & PTE_A_MASK,
+ tr->itrs[i].pte >> PTE_D_SHIFT & PTE_D_MASK,
ma_val, ma[ma_val],
- er->itrs[i].itir >> ITIR_KEY_SHIFT & ITIR_KEY_MASK);
+ tr->itrs[i].itir >> ITIR_KEY_SHIFT & ITIR_KEY_MASK);
}
printf("\n dtr: P rid va pa ps ed pl "
"ar a d ma key\n");
for (i = 0; i < 8; i++) {
- ps_val = er->dtrs[i].itir >> ITIR_PS_SHIFT & ITIR_PS_MASK;
- ma_val = er->dtrs[i].pte >> PTE_MA_SHIFT & PTE_MA_MASK;
- pa = (er->dtrs[i].pte >> PTE_PPN_SHIFT & PTE_PPN_MASK) <<
+ ps_val = tr->dtrs[i].itir >> ITIR_PS_SHIFT & ITIR_PS_MASK;
+ ma_val = tr->dtrs[i].pte >> PTE_MA_SHIFT & PTE_MA_MASK;
+ pa = (tr->dtrs[i].pte >> PTE_PPN_SHIFT & PTE_PPN_MASK) <<
PTE_PPN_SHIFT;
pa = (pa >> ps_val) << ps_val;
printf(" [%d] %ld %06lx %016lx %013lx %02x %s %ld %ld %ld %ld "
"%ld %d %s %06lx\n", i,
- er->dtrs[i].pte >> PTE_P_SHIFT & PTE_P_MASK,
- er->dtrs[i].rid >> RR_RID_SHIFT & RR_RID_MASK,
- er->dtrs[i].vadr, pa, ps_val,
+ tr->dtrs[i].pte >> PTE_P_SHIFT & PTE_P_MASK,
+ tr->dtrs[i].rid >> RR_RID_SHIFT & RR_RID_MASK,
+ tr->dtrs[i].vadr, pa, ps_val,
((ps_val >= ITIR_PS_MIN && ps_val <= ITIR_PS_MAX) ?
ps[ps_val - ITIR_PS_MIN] : " "),
- er->dtrs[i].pte >> PTE_ED_SHIFT & PTE_ED_MASK,
- er->dtrs[i].pte >> PTE_PL_SHIFT & PTE_PL_MASK,
- er->dtrs[i].pte >> PTE_AR_SHIFT & PTE_AR_MASK,
- er->dtrs[i].pte >> PTE_A_SHIFT & PTE_A_MASK,
- er->dtrs[i].pte >> PTE_D_SHIFT & PTE_D_MASK,
+ tr->dtrs[i].pte >> PTE_ED_SHIFT & PTE_ED_MASK,
+ tr->dtrs[i].pte >> PTE_PL_SHIFT & PTE_PL_MASK,
+ tr->dtrs[i].pte >> PTE_AR_SHIFT & PTE_AR_MASK,
+ tr->dtrs[i].pte >> PTE_A_SHIFT & PTE_A_MASK,
+ tr->dtrs[i].pte >> PTE_D_SHIFT & PTE_D_MASK,
ma_val, ma[ma_val],
- er->dtrs[i].itir >> ITIR_KEY_SHIFT & ITIR_KEY_MASK);
+ tr->dtrs[i].itir >> ITIR_KEY_SHIFT & ITIR_KEY_MASK);
}
}
#endif
}
}
}
-#else
-#define print_stack(ctx, vcpu)
#endif
void dump_ctx(int vcpu)
}
print_ctx(&ctx);
+#ifndef NO_TRANSLATION
if (is_kernel_text(INSTR_POINTER((&ctx.user_regs))))
print_stack(&ctx, vcpu);
+#endif
ret = xc_domain_unpause(xc_handle, domid);
if (ret < 0) {
void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c)
{
int i;
- struct vcpu_extra_regs *er = &c.nat->extra_regs;
+ struct vcpu_tr_regs *tr = &c.nat->regs.tr;
+ struct cpu_user_regs *uregs = vcpu_regs(v);
+ int is_hvm = VMX_DOMAIN(v);
- c.nat->user_regs = *vcpu_regs(v);
- c.nat->privregs_pfn = get_gpfn_from_mfn(virt_to_maddr(v->arch.privregs) >>
- PAGE_SHIFT);
+ c.nat->regs.b[6] = uregs->b6;
+ c.nat->regs.b[7] = uregs->b7;
+
+ c.nat->regs.ar.csd = uregs->ar_csd;
+ c.nat->regs.ar.ssd = uregs->ar_ssd;
+
+ c.nat->regs.r[8] = uregs->r8;
+ c.nat->regs.r[9] = uregs->r9;
+ c.nat->regs.r[10] = uregs->r10;
+ c.nat->regs.r[11] = uregs->r11;
+
+ if (is_hvm) {
+ c.nat->regs.psr = vmx_vcpu_get_psr (v);
+ } else {
+ /* FIXME: get the vpsr. */
+ c.nat->regs.psr = uregs->cr_ipsr;
+ }
+
+ c.nat->regs.ip = uregs->cr_iip;
+ c.nat->regs.cfm = uregs->cr_ifs;
+
+ c.nat->regs.ar.unat = uregs->ar_unat;
+ c.nat->regs.ar.pfs = uregs->ar_pfs;
+ c.nat->regs.ar.rsc = uregs->ar_rsc;
+ c.nat->regs.ar.rnat = uregs->ar_rnat;
+ c.nat->regs.ar.bspstore = uregs->ar_bspstore;
+
+ c.nat->regs.pr = uregs->pr;
+ c.nat->regs.b[0] = uregs->b0;
+ c.nat->regs.ar.bsp = uregs->ar_bspstore + (uregs->loadrs >> 16);
+
+ c.nat->regs.r[1] = uregs->r1;
+ c.nat->regs.r[12] = uregs->r12;
+ c.nat->regs.r[13] = uregs->r13;
+ c.nat->regs.ar.fpsr = uregs->ar_fpsr;
+ c.nat->regs.r[15] = uregs->r15;
+
+ c.nat->regs.r[14] = uregs->r14;
+ c.nat->regs.r[2] = uregs->r2;
+ c.nat->regs.r[3] = uregs->r3;
+ c.nat->regs.r[16] = uregs->r16;
+ c.nat->regs.r[17] = uregs->r17;
+ c.nat->regs.r[18] = uregs->r18;
+ c.nat->regs.r[19] = uregs->r19;
+ c.nat->regs.r[20] = uregs->r20;
+ c.nat->regs.r[21] = uregs->r21;
+ c.nat->regs.r[22] = uregs->r22;
+ c.nat->regs.r[23] = uregs->r23;
+ c.nat->regs.r[24] = uregs->r24;
+ c.nat->regs.r[25] = uregs->r25;
+ c.nat->regs.r[26] = uregs->r26;
+ c.nat->regs.r[27] = uregs->r27;
+ c.nat->regs.r[28] = uregs->r28;
+ c.nat->regs.r[29] = uregs->r29;
+ c.nat->regs.r[30] = uregs->r30;
+ c.nat->regs.r[31] = uregs->r31;
+
+ c.nat->regs.ar.ccv = uregs->ar_ccv;
+
+ c.nat->regs.f[6] = uregs->f6;
+ c.nat->regs.f[7] = uregs->f7;
+ c.nat->regs.f[8] = uregs->f8;
+ c.nat->regs.f[9] = uregs->f9;
+ c.nat->regs.f[10] = uregs->f10;
+ c.nat->regs.f[11] = uregs->f11;
+
+ c.nat->regs.r[4] = uregs->r4;
+ c.nat->regs.r[5] = uregs->r5;
+ c.nat->regs.r[6] = uregs->r6;
+ c.nat->regs.r[7] = uregs->r7;
+
+ /* FIXME: to be reordered. */
+ c.nat->regs.nats = uregs->eml_unat;
+
+ c.nat->privregs_pfn = get_gpfn_from_mfn
+ (virt_to_maddr(v->arch.privregs) >> PAGE_SHIFT);
/* Fill extra regs. */
for (i = 0; i < 8; i++) {
- er->itrs[i].pte = v->arch.itrs[i].pte.val;
- er->itrs[i].itir = v->arch.itrs[i].itir;
- er->itrs[i].vadr = v->arch.itrs[i].vadr;
- er->itrs[i].rid = v->arch.itrs[i].rid;
+ tr->itrs[i].pte = v->arch.itrs[i].pte.val;
+ tr->itrs[i].itir = v->arch.itrs[i].itir;
+ tr->itrs[i].vadr = v->arch.itrs[i].vadr;
+ tr->itrs[i].rid = v->arch.itrs[i].rid;
}
for (i = 0; i < 8; i++) {
- er->dtrs[i].pte = v->arch.dtrs[i].pte.val;
- er->dtrs[i].itir = v->arch.dtrs[i].itir;
- er->dtrs[i].vadr = v->arch.dtrs[i].vadr;
- er->dtrs[i].rid = v->arch.dtrs[i].rid;
+ tr->dtrs[i].pte = v->arch.dtrs[i].pte.val;
+ tr->dtrs[i].itir = v->arch.dtrs[i].itir;
+ tr->dtrs[i].vadr = v->arch.dtrs[i].vadr;
+ tr->dtrs[i].rid = v->arch.dtrs[i].rid;
}
- er->event_callback_ip = v->arch.event_callback_ip;
- er->dcr = v->arch.privregs ? PSCB(v,dcr) : 0;
- er->iva = v->arch.iva;
+ c.nat->event_callback_ip = v->arch.event_callback_ip;
+
+ /* If PV and privregs is not set, we can't read mapped registers. */
+ if (!v->domain->arch.is_vti && v->arch.privregs == NULL)
+ return;
+
+ vcpu_get_dcr (v, &c.nat->regs.cr.dcr);
+ vcpu_get_iva (v, &c.nat->regs.cr.iva);
}
int arch_set_info_guest(struct vcpu *v, vcpu_guest_context_u c)
{
- struct pt_regs *regs = vcpu_regs (v);
+ struct cpu_user_regs *uregs = vcpu_regs(v);
struct domain *d = v->domain;
int rc;
+
+ uregs->b6 = c.nat->regs.b[6];
+ uregs->b7 = c.nat->regs.b[7];
+
+ uregs->ar_csd = c.nat->regs.ar.csd;
+ uregs->ar_ssd = c.nat->regs.ar.ssd;
+
+ uregs->r8 = c.nat->regs.r[8];
+ uregs->r9 = c.nat->regs.r[9];
+ uregs->r10 = c.nat->regs.r[10];
+ uregs->r11 = c.nat->regs.r[11];
+
+ uregs->cr_ipsr = c.nat->regs.psr;
+ uregs->cr_iip = c.nat->regs.ip;
+ uregs->cr_ifs = c.nat->regs.cfm;
+
+ uregs->ar_unat = c.nat->regs.ar.unat;
+ uregs->ar_pfs = c.nat->regs.ar.pfs;
+ uregs->ar_rsc = c.nat->regs.ar.rsc;
+ uregs->ar_rnat = c.nat->regs.ar.rnat;
+ uregs->ar_bspstore = c.nat->regs.ar.bspstore;
+
+ uregs->pr = c.nat->regs.pr;
+ uregs->b0 = c.nat->regs.b[0];
+ uregs->loadrs = (c.nat->regs.ar.bsp - c.nat->regs.ar.bspstore) << 16;
+
+ uregs->r1 = c.nat->regs.r[1];
+ uregs->r12 = c.nat->regs.r[12];
+ uregs->r13 = c.nat->regs.r[13];
+ uregs->ar_fpsr = c.nat->regs.ar.fpsr;
+ uregs->r15 = c.nat->regs.r[15];
+
+ uregs->r14 = c.nat->regs.r[14];
+ uregs->r2 = c.nat->regs.r[2];
+ uregs->r3 = c.nat->regs.r[3];
+ uregs->r16 = c.nat->regs.r[16];
+ uregs->r17 = c.nat->regs.r[17];
+ uregs->r18 = c.nat->regs.r[18];
+ uregs->r19 = c.nat->regs.r[19];
+ uregs->r20 = c.nat->regs.r[20];
+ uregs->r21 = c.nat->regs.r[21];
+ uregs->r22 = c.nat->regs.r[22];
+ uregs->r23 = c.nat->regs.r[23];
+ uregs->r24 = c.nat->regs.r[24];
+ uregs->r25 = c.nat->regs.r[25];
+ uregs->r26 = c.nat->regs.r[26];
+ uregs->r27 = c.nat->regs.r[27];
+ uregs->r28 = c.nat->regs.r[28];
+ uregs->r29 = c.nat->regs.r[29];
+ uregs->r30 = c.nat->regs.r[30];
+ uregs->r31 = c.nat->regs.r[31];
+
+ uregs->ar_ccv = c.nat->regs.ar.ccv;
+
+ uregs->f6 = c.nat->regs.f[6];
+ uregs->f7 = c.nat->regs.f[7];
+ uregs->f8 = c.nat->regs.f[8];
+ uregs->f9 = c.nat->regs.f[9];
+ uregs->f10 = c.nat->regs.f[10];
+ uregs->f11 = c.nat->regs.f[11];
+
+ uregs->r4 = c.nat->regs.r[4];
+ uregs->r5 = c.nat->regs.r[5];
+ uregs->r6 = c.nat->regs.r[6];
+ uregs->r7 = c.nat->regs.r[7];
+
+ /* FIXME: to be reordered and restored. */
+ /* uregs->eml_unat = c.nat->regs.nat; */
+ uregs->eml_unat = 0;
- *regs = c.nat->user_regs;
-
if (!d->arch.is_vti) {
/* domain runs at PL2/3 */
- regs->cr_ipsr |= 2UL << IA64_PSR_CPL0_BIT;
- regs->ar_rsc |= (2 << 2); /* force PL2/3 */
+ uregs->cr_ipsr |= 2UL << IA64_PSR_CPL0_BIT;
+ uregs->ar_rsc |= (2 << 2); /* force PL2/3 */
}
if (c.nat->flags & VGCF_EXTRA_REGS) {
int i;
- struct vcpu_extra_regs *er = &c.nat->extra_regs;
+ struct vcpu_tr_regs *tr = &c.nat->regs.tr;
for (i = 0; i < 8; i++) {
- vcpu_set_itr(v, i, er->itrs[i].pte,
- er->itrs[i].itir,
- er->itrs[i].vadr,
- er->itrs[i].rid);
+ vcpu_set_itr(v, i, tr->itrs[i].pte,
+ tr->itrs[i].itir,
+ tr->itrs[i].vadr,
+ tr->itrs[i].rid);
}
for (i = 0; i < 8; i++) {
vcpu_set_dtr(v, i,
- er->dtrs[i].pte,
- er->dtrs[i].itir,
- er->dtrs[i].vadr,
- er->dtrs[i].rid);
+ tr->dtrs[i].pte,
+ tr->dtrs[i].itir,
+ tr->dtrs[i].vadr,
+ tr->dtrs[i].rid);
}
- v->arch.event_callback_ip = er->event_callback_ip;
- v->arch.iva = er->iva;
+ v->arch.event_callback_ip = c.nat->event_callback_ip;
+ v->arch.iva = c.nat->regs.cr.iva;
}
if (v->is_initialised)